package com.auxgroup.smarthome.utils.excel.util;

import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;

/**
 * 读取office转换成Workbok对象
 * Created by Toby Lai on 2017/5/1.
 */
public class ExcelReadUtil {
    private ExcelReadUtil() {

    }

    /**
     * <p>可以从文件中读取HSSFWorkbook / XSSFWorkbook，并且保证文件
     * 是标准的office文件，可读状态，有可能文件有密码保护，如没有密码可以传空值
     * </p>
     * <p>
     *     注意：使用后需要释放资源，调用close方法
     * </p>
     * @param file excel文件
     * @param password 如果没有密码则传null
     * @return
     */
    public static Workbook readExcel(File file, String password){
        Workbook workbook = null;
        try {
            workbook = WorkbookFactory.create(file, password);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InvalidFormatException e) {
            e.printStackTrace();
        }
        return workbook;
    }

    /**
     * <p>可以从文件中读取HSSFWorkbook / XSSFWorkbook，并且保证文件
     * 是标准的office文件，可读状态
     * </p>
     * <p>
     *     注意：使用后需要释放资源，调用close方法
     * </p>
     * @param file
     * @return
     */
    public static Workbook readExcel(File file) {
        return readExcel(file, null);
    }

    /**
     * * <p>从输入流InputStream中读取HSSFWorkbook / XSSFWorkbook，并且保证文件
     * 是标准的office文件，处于可读状态，有可能文件有密码保护，如没有密码可以传空值
     * </p>
     * <p>
     *     注意：使用后需要释放资源，调用close方法
     * </p>
     * @param in
     * @param password
     * @return
     */
    public static Workbook readExcel(InputStream in, String password) {
        Workbook workbook = null;
        try {
            workbook = WorkbookFactory.create(in, password);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InvalidFormatException e) {
            e.printStackTrace();
        }
        return workbook;
    }

    /**
     * * <p>从输入流InputStream中读取HSSFWorkbook / XSSFWorkbook，并且保证文件
     * 是标准的office文件，处于可读状态
     * </p>
     * <p>
     *     注意：使用后需要释放资源，调用close方法
     * </p>
     * @param in
     * @return
     */
    public static Workbook readExcel(InputStream in) {
        return readExcel(in, null);
    }

}
